﻿using System;
using System.Collections.Generic;
using OrionApplication.OrionLib;
using OrionApplication.OrionLib.Dao;
using OrionApplication.OrionLib.Orion;

namespace OrionApplication.OrionForm
{
    public partial class OrionMenuDroit : OrionBaseDoubleForm
    {
        public String TypeDroit;
        public Int32 OrionMenuLigneId;

        public OrionMenuDroit()
            : base()
        {
            InitializeComponent();
        }

        public OrionMenuDroit(String titre, String TypeDroit, Int32 OrionMenuLigneId)
            : base(titre)
        {
            InitializeComponent();
            
            this.TypeDroit = TypeDroit;
            this.OrionMenuLigneId = OrionMenuLigneId;

            if (TypeDroit.Equals("USER"))
                dao = new DaoOrionUserMenu();
            else if (TypeDroit.Equals("GROUP"))
                dao = new DaoOrionGroupMenu();

            RempliList();
        }

        public void RempliList()
        {
            if (TypeDroit.Equals("USER"))
            {
                List<OrionUser> lUser = new DaoOrionUser().SelectAll();
                int i = 0;
                foreach (OrionUser ou in lUser)
                {
                    kCLBDroit.Items.Add(ou.OrionId + " - " + ou.Login + "(" + ou.Nom + " " + ou.Prenom + ")");
                    OrionUserMenu oum = ((DaoOrionUserMenu)this.dao).SelectByMenuUser(this.OrionMenuLigneId, ou.OrionId);
                    if (!oum.OrionId.Equals(0))
                        kCLBDroit.SetItemChecked(i, true);
                    i++;
                }
            }
            else if (TypeDroit.Equals("GROUP"))
            {
                DaoOrionGroup daoGroup = new DaoOrionGroup();
                List<OrionGroup> lUser = daoGroup.SelectAll();
                int i = 0;
                foreach (OrionGroup ou in lUser)
                {
                    kCLBDroit.Items.Add(ou.OrionId + " - " + ou.Libelle);
                    OrionGroupMenu ogm = ((DaoOrionGroupMenu)this.dao).SelectByMenuGroup(this.OrionMenuLigneId, ou.OrionId);
                    if (!ogm.OrionId.Equals(0))
                        kCLBDroit.SetItemChecked(i, true);
                    i++;
                }
            }
            else
            {
                OrionOutils.Erreur("Erreur de Paramétre",
                    "Un mauvais paramétre a été passé (" + TypeDroit + ") mais il n'existe pas." +
                    Environment.NewLine +
                    "Le fenêtre va se fermer.");
                this.Close();
            }
        }

        private void SauvegardeForm()
        {
            for (Int32 i = 0; i < kCLBDroit.Items.Count; i++)
            {
                bool ischeked = kCLBDroit.GetItemChecked(i);
                string s = kCLBDroit.Items[i].ToString();
                Int32 objId = Int32.Parse(s.Split('-')[0].Trim());

                if (TypeDroit.Equals("USER"))
                {
                    OrionUserMenu oum = ((DaoOrionUserMenu)this.dao).SelectByMenuUser(this.OrionMenuLigneId, objId);
                    if (ischeked)
                    {
                        if (oum.OrionId.Equals(0))
                        {
                            oum.OrionMenuDroitId = this.OrionMenuLigneId;
                            oum.OrionUserDroitId = objId;

                            ((DaoOrionUserMenu)this.dao).Insert(oum);
                        }
                    }
                    else if (!oum.OrionId.Equals(0))
                        ((DaoOrionUserMenu)this.dao).Delete(oum.OrionId);
                }
                else if (TypeDroit.Equals("GROUP"))
                {
                    OrionGroupMenu ogm = ((DaoOrionGroupMenu)this.dao).SelectByMenuGroup(this.OrionMenuLigneId, objId);
                    if (ischeked)
                    {
                        if (ogm.OrionId.Equals(0))
                        {
                            ogm.OrionMenuDroitId = this.OrionMenuLigneId;
                            ogm.OrionGroupDroitId = objId;

                            ((DaoOrionGroupMenu)this.dao).Insert(ogm);
                        }
                    }
                    else if (!ogm.OrionId.Equals(0))
                        ((DaoOrionGroupMenu)this.dao).Delete(ogm.OrionId);
                }
                else
                {
                    OrionOutils.Erreur("Erreur de Paramétre",
                        "Un mauvais paramétre a été passé (" + TypeDroit + ") mais il n'existe pas." +
                        Environment.NewLine +
                        "Le fenêtre va se fermer.");
                    this.Close();
                }

                this.RempliKDgv();
            }
        }
    }
}
